﻿
#include "zyToolBar.h"

DarkMoonUI::zyToolBar::zyToolBar()
{
	SetMember(L"this", (LONG_PTR)this);
	m_obj->setWndProc(zyToolBar_WndProc);
	m_obj->setChildWndProc(zyToolBar_ChildWndProc);
	m_obj->setDestroy(zyToolBar_Destroy);
}
DarkMoonUI::zyToolBar::~zyToolBar()
{

}
void WINAPI DarkMoonUI::zyToolBar::zyToolBar_Destroy(zyObject* obj)
{
	zyToolBar* zyb = (zyToolBar*)obj->getPtrData(L"this");
	zyb->OnNCDestroy();
	zyCtrol::zyCtrol_Destroy(obj);
}
bool DarkMoonUI::zyToolBar::zyToolbar_OnCustomDraw(HWND hwnd, HDC hdc, RECT& hrc)
{
	if (HasMember(L"pBackImage") == false && HasMember(L"BackColor") == false)
		return false;
	_画图片(hwnd, hdc, (int)GetMember(L"ShowImageType"), hrc, GetMember(L"pBackImage"), (int)GetMember(L"BackColor"));
	return true;
}
LRESULT WINAPI DarkMoonUI::zyToolBar::zyToolBar_ChildWndProc(zyObject* obj, HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL* bHandle)
{
	if (message == WM_NOTIFY)
	{
		NMHDR* nm = reinterpret_cast<NMHDR*>(lParam);
		if (nm->code == TTN_NEEDTEXTW) {
			NMTTDISPINFO* ttinfo = reinterpret_cast<NMTTDISPINFO*>(lParam);
			void* HashToolTips = obj->getPtrData(L"HashToolTips");
			if (HashToolTips != NULL) {
				std::unordered_map<int, std::wstring>* ToolTips = (std::unordered_map<int, std::wstring>*)HashToolTips;
                auto it = ToolTips->find((int)(INT_PTR)ttinfo->hdr.idFrom);
                if (it != ToolTips->end()) {
					ttinfo->lpszText = (LPWSTR)it->second.c_str();
					// 如果需要，还可以设置 ttinfo->uFlags 为 TTDT_STRING 来明确指示 lpszText 是一个字符串  
					//ttinfo->uFlags = TTF_DI_SETITEM;  
				}
			}
		}
		else if (nm->code == NM_CUSTOMDRAW) {
			NMCUSTOMDRAW* ncd = reinterpret_cast<NMCUSTOMDRAW*>(lParam);
			if (ncd->dwDrawStage == CDDS_PREPAINT) {
				zyToolBar* p = (zyToolBar*)obj->getPtrData(L"this");
				if (p->zyToolbar_OnCustomDraw(hWnd, ncd->hdc, ncd->rc)) {
					*bHandle = true;
					return CDRF_NOTIFYITEMDRAW;
				}
			}
			else if ((ncd->dwDrawStage & CDDS_ITEMPOSTPAINT) != 0) {
				NMTBCUSTOMDRAW* nTbcd = reinterpret_cast<NMTBCUSTOMDRAW*>(lParam);
				DWORD TextColor = (DWORD)(INT_PTR)obj->getPtrData(L"TextColor");
				nTbcd->clrText = TextColor;
				//这里不需要memcpy,因为我们已经直接修改了lParam指向的结构体  
				//但如果出于某种原因需要复制整个结构体，可以取消注释下面的代码
				//memcpy((void*)lParam, nTbcd, sizeof(NMTBCUSTOMDRAW)); 
			}
		}
		else if (nm->code == TBN_HOTITEMCHANGE) {
			TRegEvent* evtPtr = reinterpret_cast<TRegEvent*>(obj->getRegEvent(L"OnHotItemChange"));
			if (evtPtr != nullptr) {
				NMTBHOTITEM* nTbhot = reinterpret_cast<NMTBHOTITEM*>(lParam);
				evtPtr->handler<LRESULT>(nTbhot->hdr.hwndFrom, nTbhot->idOld, nTbhot->idNew, nTbhot->dwFlags);
			}
		}
		else if (nm->code == NM_CLICK) {
			TRegEvent* evtPtr = reinterpret_cast<TRegEvent*>(obj->getRegEvent(L"OnClick"));
			if (evtPtr != nullptr) {
				NMMOUSE* nMouse = reinterpret_cast<NMMOUSE*>(lParam);
				evtPtr->handler<LRESULT>(nMouse->hdr.hwndFrom, nMouse->dwItemSpec, nMouse->pt.x, nMouse->pt.y);
			}
		}
		else if (nm->code == TBN_DROPDOWN) {
			TRegEvent* evtPtr = reinterpret_cast<TRegEvent*>(obj->getRegEvent(L"OnDropDown"));
			if (evtPtr != nullptr) {
				NMTOOLBAR* nToolbar = reinterpret_cast<NMTOOLBAR*>(lParam);
				LRESULT id = SendMessage(nToolbar->hdr.hwndFrom, TB_COMMANDTOINDEX, nToolbar->iItem, 0);
				// ====获取按钮矩形
				RECT rc = { 0 };
				SendMessage(nToolbar->hdr.hwndFrom, TB_GETITEMRECT, id, (LPARAM)&rc);
				// ====转换为屏幕坐标
				POINT pt = { 0 };
				pt.x = rc.left;
				pt.y = rc.bottom;
				ClientToScreen(nToolbar->hdr.hwndFrom, &pt);
				evtPtr->handler<LRESULT>(nToolbar->hdr.hwndFrom, nToolbar->iItem, pt.x, pt.y);
			}
		}
		else if (nm->code == TBN_DELETINGBUTTON) {
			NMTOOLBAR* nToolbar = reinterpret_cast<NMTOOLBAR*>(lParam);
			void* HashToolTips = obj->getPtrData(L"HashToolTips");
			if (HashToolTips != nullptr) {
				std::unordered_map<int, std::wstring>* ToolTips = static_cast<std::unordered_map<int, std::wstring>*>(HashToolTips);
				auto it = ToolTips->find((int)(INT_PTR)nToolbar->hdr.idFrom);
				if (it != ToolTips->end()) {
					ToolTips->erase(it);
				}
			}
			TRegEvent* evtPtr = reinterpret_cast<TRegEvent*>(obj->getRegEvent(L"OnDeletingButton"));
			if (evtPtr != nullptr) {
				evtPtr->handler<LRESULT>(nToolbar->hdr.hwndFrom, nToolbar->iItem);
			}
		}
	}
	return zyCtrol::zyCtrol_ChildWndProc(obj, hWnd, message, wParam, lParam, bHandle);
}
LRESULT WINAPI DarkMoonUI::zyToolBar::zyToolBar_WndProc(zyObject* obj, HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL* bHandle)
{
	if (uMsg == WM_NCDESTROY) {
		zyToolBar* zyb = (zyToolBar*)obj->getPtrData(L"this");
		zyb->OnNCDestroy();
	}
	return zyCtrol::zyCtrol_WndProc(obj, hWnd, uMsg, wParam, lParam, bHandle);
}
void DarkMoonUI::zyToolBar::OnNCDestroy() {
	LONG_PTR HashToolTips = GetMember(L"HashToolTips");
	if (HashToolTips != NULL) {
		std::unordered_map<int, std::wstring>* ToolTips = (std::unordered_map<int, std::wstring>*)HashToolTips;
		ToolTips->clear();
		delete (std::unordered_map<int, std::wstring>*)ToolTips;
	}
	LONG_PTR pBackImage = GetMember(L"pBackImage");
	if (pBackImage)
		SetMember(L"pBackImage", 0);
	resObject* pImageList = (resObject*)GetMember(L"pImageList");
	if (pImageList != nullptr) {
		//IUnknown_Release (pImageList);
		pImageList->release();
		SetMember(L"pImageList", 0);
	}
	pImageList = (resObject*)GetMember(L"pImageListHot");
	if (pImageList != nullptr) {
		//IUnknown_Release (pImageList);
		pImageList->release();
		SetMember(L"pImageListHot", 0);
	}
	pImageList = (resObject*)GetMember(L"pImageListDisable");
	if (pImageList != nullptr) {
		//IUnknown_Release (pImageList);
		pImageList->release();
		SetMember(L"pImageListDisable", 0);
	}
}
BOOL DarkMoonUI::zyToolBar::创建(HWND 参数_父窗口, const std::wstring& 参数_标题, POINT 参数_位置, POINT 参数_尺寸, int 参数_ID, int 参数_窗口风格, int 参数_扩展风格)
{
	if (参数_ID == NULL)
		参数_ID = 黑月默认ID();
	if (参数_窗口风格 == 0)
		参数_窗口风格 = TBSTYLE_FLAT | CCS_TOP | TBSTYLE_TOOLTIPS | TBSTYLE_WRAPABLE | CCS_NODIVIDER;

	bool b = _CreateCtrol(参数_父窗口, 参数_标题, 参数_位置, 参数_尺寸, 参数_ID, 参数_窗口风格| TBSTYLE_CUSTOMERASE, 参数_扩展风格, L"ToolbarWindow32");
	if (b) {
		发送消息(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);//设置BUTTON结构大小
		发送消息(TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS | TBSTYLE_EX_DOUBLEBUFFER);//设置扩展风格
		LONG_PTR HashToolTips = GetMember(L"HashToolTips");
		if (HashToolTips != NULL) {
			delete (std::unordered_map<int, std::wstring>*)HashToolTips;
		}
		std::unordered_map<int, std::wstring>* Controls = new std::unordered_map<int, std::wstring>();
		SetMember(L"HashToolTips", (LONG_PTR)Controls);
	}
	return b;
}

BOOL DarkMoonUI::zyToolBar::创建(zyWindow& 参数_父窗口, const std::wstring& 参数_标题, POINT 参数_位置, POINT 参数_尺寸, int 参数_ID, int 参数_窗口风格, int 参数_扩展风格)
{
	if (参数_ID == NULL)
		参数_ID = 黑月默认ID();
	if(参数_窗口风格 == 0)
		参数_窗口风格= TBSTYLE_FLAT | CCS_TOP | TBSTYLE_TOOLTIPS | TBSTYLE_WRAPABLE | CCS_NODIVIDER;

	bool b = _CreateCtrol(参数_父窗口.getHwnd(), 参数_标题, 参数_位置, 参数_尺寸, 参数_ID, 参数_窗口风格 | TBSTYLE_CUSTOMERASE, 参数_扩展风格, L"ToolbarWindow32");
	if (b) {
		发送消息(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);//设置BUTTON结构大小
		发送消息(TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS | TBSTYLE_EX_DOUBLEBUFFER);//设置扩展风格
		LONG_PTR HashToolTips = GetMember(L"HashToolTips");
		if (HashToolTips != NULL) {
			delete (std::unordered_map<int, std::wstring>*)HashToolTips;
		}
		std::unordered_map<int, std::wstring>* Controls = new std::unordered_map<int, std::wstring>();
        SetMember(L"HashToolTips", (LONG_PTR)Controls);
	}
	return b;
}
int DarkMoonUI::zyToolBar::插入按钮(int 参数_插入位置, int 参数_按钮ID, const std::wstring& 参数_标题, int 参数_类型, int 参数_图片索引, const std::wstring& 参数_提示文本, int 参数_状态) {
	TBBUTTON tbbtn = { 0 };
	if (参数_插入位置 == -1) {
		参数_插入位置 = (int)sendMsg(TB_BUTTONCOUNT, 0, 0);
	}
	if (参数_类型 == -1) {
		参数_类型 = BTNS_BUTTON;
	}
	if (参数_状态 == -1) {
		参数_状态 = TBSTATE_ENABLED;
	}
	tbbtn.iBitmap = 参数_图片索引;
	tbbtn.idCommand = 参数_按钮ID;
	tbbtn.fsState = 参数_状态;
	tbbtn.fsStyle = 参数_类型;

	if (!参数_标题.empty()) {
		tbbtn.iString = (int)sendMsg(TB_ADDSTRINGW, 0, (LPARAM)参数_标题.c_str());
		if (tbbtn.iString == -1) {
			// 处理错误：无法添加字符串到工具栏  
			return -1;
		}
	}

	int ret = (int)sendMsg(TB_INSERTBUTTONW, 参数_插入位置, (LPARAM)&tbbtn);
	if (ret == 0) {
		// 处理错误：无法插入按钮到工具栏  
		return -1;
	}
	LONG_PTR HashToolTips = GetMember(L"HashToolTips");
	if (HashToolTips != NULL) {
		std::unordered_map<int, std::wstring>* m_HashToolTips = (std::unordered_map<int, std::wstring>*)HashToolTips;
		if (!参数_提示文本.empty()) {
			//m_HashToolTips[参数_按钮ID] = 参数_提示文本;
			m_HashToolTips->insert_or_assign(参数_按钮ID, 参数_提示文本);
		}
	}

	return 参数_插入位置;
}
bool DarkMoonUI::zyToolBar::置缩进(int 参数_缩进距离) {
	return sendMsg(TB_SETINDENT, 参数_缩进距离, 0) != 0;
}
bool DarkMoonUI::zyToolBar::绑定(HWND 参数_父窗口, int 参数_资源ID, bool 参数_使用默认字体) {//成功返回真，失败返回假。
	HWND hwnd = GetDlgItem(参数_父窗口, 参数_资源ID);
	if (hwnd != 0) {
		sendMsg(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); // 设置BUTTON结构大小
		sendMsg(TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS | TBSTYLE_EX_DOUBLEBUFFER);  // 设置扩展风格
		if (参数_使用默认字体)
			SendMessage(hwnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 1);
	}
	return _BindWindow(hwnd);
}
bool DarkMoonUI::zyToolBar::绑定窗口句柄(HWND 参数_窗口句柄) {//成功返回真，失败返回假。
	if (IsWindow(参数_窗口句柄)) {
		sendMsg(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); // 设置BUTTON结构大小
		sendMsg(TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS | TBSTYLE_EX_DOUBLEBUFFER);  // 设置扩展风格
	}
	return _BindWindow(参数_窗口句柄);
}
int DarkMoonUI::zyToolBar::背景图显示方式(int 参数_图片显示方式) {//"图片显示方式_"开头常量
	int ShowImageType = (int)GetMember(L"ShowImageType");
	if (参数_图片显示方式 == 0)
		SetMember(L"ShowImageType", 参数_图片显示方式);
	return ShowImageType;
}
int DarkMoonUI::zyToolBar::背景色(int 参数_背景色) {//RGB颜色值
	int color = zyARGB2RGB((int)GetMember(L"BackColor"), 255);
	if (参数_背景色 == 0)
		return color;
	else {
		SetMember(L"BackColor", zyRGB2ARGB(参数_背景色, 255));
		return color;
	}
}
int DarkMoonUI::zyToolBar::文本色(int 参数_文本色) {//RGB颜色值
	int color = (int)GetMember(L"TextColor");
	if (参数_文本色 == 0)
		return color;
	else {
		SetMember(L"TextColor", 参数_文本色);
		return color;
	}
}
int DarkMoonUI::zyToolBar::取按钮ID(int 参数_按钮索引) {//根据按钮索引取按钮的idCommand
	TBBUTTON tbbtn = { 0 };
	sendMsg(TB_GETBUTTON, 参数_按钮索引, (LPARAM)&tbbtn);
	return tbbtn.idCommand;
}
bool DarkMoonUI::zyToolBar::置按钮ID(int 参数_按钮索引, int 参数_按钮ID) {
	return sendMsg(TB_SETCMDID, 参数_按钮索引, 参数_按钮ID) != 0;
}
int DarkMoonUI::zyToolBar::取按钮索引(int 参数_按钮ID) {//根据按钮的idCommand取按钮索引
	return (int)sendMsg(TB_COMMANDTOINDEX, 参数_按钮ID, 0);
}
bool DarkMoonUI::zyToolBar::加入状态(int 参数_按钮索引, int 参数_按钮状态) {//将指定状态值加入到按钮的存在状态中。
	int 局部_状态 = (int)sendMsg(TB_GETSTATE, 取按钮ID(参数_按钮索引), 0);
	局部_状态 = 局部_状态 | 参数_按钮状态;
	return sendMsg(TB_SETSTATE, 取按钮ID(参数_按钮索引), 局部_状态) != 0;
}
bool DarkMoonUI::zyToolBar::去除状态(int 参数_按钮索引, int 参数_按钮状态) {//从按钮的存在状态中去除指定状态值。
	int 局部_状态 = (int)sendMsg(TB_GETSTATE, 取按钮ID(参数_按钮索引), 0);
	if ((局部_状态 & 参数_按钮状态) != 0)
		局部_状态 = (局部_状态 ^ 参数_按钮状态);
	return sendMsg(TB_SETSTATE, 取按钮ID(参数_按钮索引), 局部_状态) != 0;
}
int DarkMoonUI::zyToolBar::取状态(int 参数_按钮索引) {
	return (int)sendMsg(TB_GETSTATE, 取按钮ID(参数_按钮索引), 0);
}
bool DarkMoonUI::zyToolBar::判断状态(int 参数_按钮索引, int 参数_状态类型) {//判断按钮是否有某状态。
	int 局部_类型 = 0;
	if (参数_状态类型 == TBSTATE_CHECKED)
		局部_类型 = TB_ISBUTTONCHECKED;
	else if (参数_状态类型 == TBSTATE_PRESSED)
		局部_类型 = TB_ISBUTTONPRESSED;
	else if (参数_状态类型 == TBSTATE_ENABLED)
		局部_类型 = TB_ISBUTTONENABLED;
	else if (参数_状态类型 == TBSTATE_HIDDEN)
		局部_类型 = TB_ISBUTTONHIDDEN;
	else if (参数_状态类型 == TBSTATE_INDETERMINATE)
		局部_类型 = TB_ISBUTTONINDETERMINATE;
	return sendMsg(局部_类型, 取按钮ID(参数_按钮索引), 0) != 0;
}
bool DarkMoonUI::zyToolBar::删除按钮(int 参数_按钮索引) {//删除工具栏上的一个按钮
	int ret = (int)sendMsg(TB_DELETEBUTTON, 参数_按钮索引, 0);
	return ret != 0;
}
std::wstring DarkMoonUI::zyToolBar::取标题(int 参数_按钮索引) {//Unicode文本。 取回指定按钮的标题文本。
	std::wstring 局部_标题;
	int 局部_ID = 取按钮ID(参数_按钮索引);
	int 局部_长度 = (int)sendMsg(TB_GETBUTTONTEXTW, 局部_ID, 0) * 2 + 2;
	局部_标题.resize(局部_长度);
	if (sendMsg(TB_GETBUTTONTEXTW, 局部_ID, (LPARAM)局部_标题.c_str()) != -1)
		return 局部_标题;
	return L"";
}
bool DarkMoonUI::zyToolBar::置标题(int 参数_按钮索引, const std::wstring& 参数_标题) {//设置指定按钮的标题文本。
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_TEXT | TBIF_BYINDEX;
	tbinfo.cchText = (int)参数_标题.size();
	tbinfo.pszText = (LPWSTR)参数_标题.c_str();
	int ret = (int)sendMsg(TB_SETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo);
	return ret != 0;
}
int DarkMoonUI::zyToolBar::取类型(int 参数_按钮索引) {//取回指定按钮的类型，返回"工具按钮_"开头常量
	TBBUTTON tbbtn = { 0 };
	sendMsg(TB_GETBUTTON, 参数_按钮索引, (LPARAM)&tbbtn);
	int 局部_类型 = tbbtn.fsStyle;
	if ((局部_类型 & TBSTYLE_CHECK) == TBSTYLE_CHECK && (局部_类型 & TBSTYLE_GROUP) == 0)
		return BTNS_CHECK;
	else if ((局部_类型 & TBSTYLE_CHECKGROUP) == TBSTYLE_CHECKGROUP)
		return BTNS_CHECKGROUP;
	else if ((局部_类型 & TBSTYLE_DROPDOWN) == TBSTYLE_DROPDOWN)
		return BTNS_DROPDOWN;
	else if ((局部_类型 & TBSTYLE_SEP) == TBSTYLE_SEP)
		return BTNS_SEP;
	return BTNS_BUTTON;
}
bool DarkMoonUI::zyToolBar::置类型(int 参数_按钮索引, int 参数_类型) {//设置按钮类型。
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_STYLE | TBIF_BYINDEX;
	tbinfo.fsStyle = 参数_类型;
	return sendMsg(TB_SETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo) != 0;
}
int DarkMoonUI::zyToolBar::取图片(int 参数_按钮索引) {
	return (int)sendMsg(TB_GETBITMAP, 取按钮ID(参数_按钮索引), 0);
}
bool DarkMoonUI::zyToolBar::置图片(int 参数_按钮索引, int 参数_图片索引) {
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_IMAGE | TBIF_BYINDEX;
	tbinfo.iImage = 参数_图片索引;
	return sendMsg(TB_SETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo) != 0;
}
POINT DarkMoonUI::zyToolBar::取按钮尺寸() {//取得按钮的宽度和高度。
	POINT 局部_尺寸 = { 0 };
	int 局部_大小 = (int)sendMsg(TB_GETBUTTONSIZE, 0, 0);
	局部_尺寸.x = LOWORD(局部_大小);
	局部_尺寸.y = HIWORD(局部_大小);
	return 局部_尺寸;
}
bool DarkMoonUI::zyToolBar::置按钮尺寸(int 参数_宽度, int 参数_高度) {//设置按钮的宽度和高度。需要插入按钮之后才能设置
	int 返回值 = (int)sendMsg(TB_SETBUTTONSIZE, 0, MAKELPARAM(参数_宽度, 参数_高度));
	sendMsg(TB_AUTOSIZE, 0, 0);
	return 返回值 != 0;
}
RECT DarkMoonUI::zyToolBar::取按钮矩形(int 参数_按钮索引) {//取按钮在工具条里的矩形位置。
	RECT 局部_矩形 = { 0 };
	sendMsg(TB_GETITEMRECT, 参数_按钮索引, (LPARAM)&局部_矩形);
	return 局部_矩形;
}
DarkMoonUI::zyLmageList* DarkMoonUI::zyToolBar::取图片组(int 参数_类型) {//返回图片组句柄。
	UINT 局部_msg = 0;
	resObject* pImageList = nullptr;
	if (参数_类型 == 工具条图片组_点燃)
		pImageList = (resObject*)GetMember(L"pImageListHot");
	else if (参数_类型 == 工具条图片组_禁止)
		pImageList = (resObject*)GetMember(L"pImageListDisable");
	else
		pImageList = (resObject*)GetMember(L"pImageList");
	if (pImageList != 0) {
		zyLmageList* imagelist = new zyLmageList();
		imagelist->setObject(pImageList);
		return imagelist;
	}
	if (参数_类型 == 工具条图片组_点燃)
		局部_msg = TB_GETHOTIMAGELIST;
	else if (参数_类型 == 工具条图片组_禁止)
		局部_msg = TB_GETDISABLEDIMAGELIST;
	else
		局部_msg = TB_GETIMAGELIST;
	zyLmageList* newimagelist = new zyLmageList();
	newimagelist->置句柄((HIMAGELIST)sendMsg(局部_msg, 0, 0));
	resObject* res = newimagelist->getObject();
	res->addRef();
	//IUnknown_AddRef (pImageList);
	if (参数_类型 == 工具条图片组_点燃)
		SetMember(L"pImageListHot", (LONG_PTR)res);
	else if (参数_类型 == 工具条图片组_禁止)
		SetMember(L"pImageListDisable", (LONG_PTR)res);
	else
		SetMember(L"pImageList", (LONG_PTR)res);
	return newimagelist;
}
void DarkMoonUI::zyToolBar::置图片组(zyLmageList& 参数_图片组, int 参数_类型) {
	// 获取当前设置的图片组对象
	resObject* pImageList = nullptr;
	UINT 局部_msg;
	if (参数_类型 == 工具条图片组_点燃) {
		局部_msg = TB_SETHOTIMAGELIST;
		pImageList = reinterpret_cast<resObject*>(GetMember(L"pImageListHot"));
	}
	else if (参数_类型 == 工具条图片组_禁止) {
		局部_msg = TB_SETDISABLEDIMAGELIST;
		pImageList = reinterpret_cast<resObject*>(GetMember(L"pImageListDisable"));
	}
	else {
		局部_msg = TB_SETIMAGELIST;
		pImageList = reinterpret_cast<resObject*>(GetMember(L"pImageList"));
	}
	if (pImageList != nullptr) {
		pImageList->release();
	}
	// 获取新图片组的对象并增加引用计数
	resObject* newImageList = 参数_图片组.getObject();
	newImageList->addRef();
	//IUnknown_AddRef (newImageList);
	// 设置新的图片组对象到成员变量中
	if (参数_类型 == 工具条图片组_点燃)
		SetMember(L"pImageListHot", (LONG_PTR)newImageList);
	else if (参数_类型 == 工具条图片组_禁止)
		SetMember(L"pImageListDisable", (LONG_PTR)newImageList);
	else
		SetMember(L"pImageList", (LONG_PTR)newImageList);
	// 发送消息设置树视图控件的图片组
	sendMsg(局部_msg, 0, reinterpret_cast<LPARAM>(参数_图片组.取句柄()));

}
void DarkMoonUI::zyToolBar::自动大小() {//当父窗口尺寸被改变时，调用此函数，调工具条宽度。
	sendMsg(TB_AUTOSIZE, 0, 0);
}
bool DarkMoonUI::zyToolBar::置按钮数值(int 参数_按钮索引, int 参数_数值) {
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_LPARAM | TBIF_BYINDEX;
	tbinfo.lParam = 参数_数值;
	return sendMsg(TB_SETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo) != 0;
}
int DarkMoonUI::zyToolBar::取按钮数值(int 参数_按钮索引) {
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_LPARAM | TBIF_BYINDEX;
	sendMsg(TB_GETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo);
	return (int)tbinfo.lParam;
}
bool DarkMoonUI::zyToolBar::置按钮宽度(int 参数_按钮索引, int 参数_宽度) {
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_SIZE | TBIF_BYINDEX;
	tbinfo.cx = 参数_宽度;
	return sendMsg(TB_SETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo) != 0;
}
int DarkMoonUI::zyToolBar::取按钮宽度(int 参数_按钮索引) {
	TBBUTTONINFO tbinfo = { 0 };
	tbinfo.cbSize = sizeof(tbinfo);
	tbinfo.dwMask = TBIF_SIZE | TBIF_BYINDEX;
	sendMsg(TB_GETBUTTONINFOW, 参数_按钮索引, (LPARAM)&tbinfo);
	return tbinfo.cx;
}